# Create your views here.
from django.contrib.auth.decorators import login_required, user_passes_test
from django.core.context_processors import csrf
from django.db.models.query import EmptyQuerySet
from django.shortcuts import get_object_or_404, render_to_response
from django.template.context import RequestContext
from django.views.generic.create_update import update_object, create_object, \
    delete_object
from django.views.generic.list_detail import object_list, object_detail
from localidades.forms import LocalidadForm, PaisForm, DepartamentoProvinciaForm, \
    CiudadForm, RegionForm
from localidades.models import Lugar, Localidad, Pais, DepartamentoProvincia, \
    Ciudad, Region
from usuarios.permisos import es_del_grupo_de_expertos, es_del_grupo_de_admins

def get_form_for_object_dato(tipo_de_localidad):
    if tipo_de_localidad == 'pais':
        model_a_pasar = Pais
        form_a_pasar = PaisForm
    elif tipo_de_localidad == 'departamentoprovincia':
        model_a_pasar = DepartamentoProvincia
        form_a_pasar = DepartamentoProvinciaForm
    elif tipo_de_localidad == 'ciudad':
        model_a_pasar = Ciudad
        form_a_pasar = CiudadForm
    elif tipo_de_localidad == 'region':
        model_a_pasar = Region
        form_a_pasar = RegionForm
    return model_a_pasar,form_a_pasar

def listar(request):    #seria la pagina de inicio para las datoTaxs
    return object_list(request,
                       queryset = Lugar.objects.all(),
                       paginate_by = 8,
                       allow_empty = True,
                       template_name = 'localidades/listar.html',
                       extra_context = {'todo' : 'class=active','tipo_de_lugar':'todo','ordenar_por':'todo'}
                       )

@login_required
def ver(request, object_id):
    get_object_or_404(Lugar, pk=object_id)
    return object_detail(request,
                         queryset = Lugar.objects.all(),
                         template_object_name =  "Lugar",
                         template_name = 'localidades/detalle.html',
                         object_id = object_id
                         ) 



def listar_por(request,tipo_de_lugar):    #seria la pagina de inicio para las datoTaxs
    q = EmptyQuerySet()
    active = 'todo'
    if tipo_de_lugar == 'todo':
        q = Lugar.objects.all()
    if tipo_de_lugar == 'nombre':
        q = Lugar.objects.all().order_by('nombre')
    if tipo_de_lugar == 'tipo':
        q = Lugar.objects.all().order_by('real_type')
    if tipo_de_lugar == 'pais':
        q = Lugar.objects.filter(real_type__name = 'pais')
        active = 'pais'
    if tipo_de_lugar == 'departamento':
        q = Lugar.objects.filter(real_type__name = 'departamento provincia')
        active = 'departamento'
    if tipo_de_lugar == 'ciudad':
        q = Lugar.objects.filter(real_type__name = 'ciudad')
        active = 'ciudad'
    if tipo_de_lugar == 'region':
        q = Lugar.objects.filter(real_type__name = 'region')
        active = 'region'

    return object_list(request,
                       queryset = q,
                       paginate_by = 8,
                       allow_empty = True,
                       template_name = 'localidades/listar.html',
                       extra_context = {active : 'class=active','tipo_de_lugar':active,'ordenar_por':'todo'}
                       )



def listar_por_ordenar(request,tipo_de_lugar,ordenar_por):    #seria la pagina de inicio para las datoTaxs
    q = EmptyQuerySet()
    active = 'todo'
    if tipo_de_lugar == 'todo':
        q = Lugar.objects.all()
    if tipo_de_lugar == 'pais':
        q = Lugar.objects.filter(real_type__name = 'pais')
        active = 'pais'
    if tipo_de_lugar == 'departamento':
        q = Lugar.objects.filter(real_type__name = 'departamentoprovincia')
        active = 'departamento'
    if tipo_de_lugar == 'ciudad':
        q = Lugar.objects.filter(real_type__name = 'ciudad')
        active = 'ciudad'
    if tipo_de_lugar == 'region':
        q = Lugar.objects.filter(real_type__name = 'region')
        active = 'region'

        
    if ordenar_por == 'nombre':
        q = q.order_by('nombre')
    if ordenar_por == 'tipo':
        q = q.order_by('real_type')
    return object_list(request,
                       queryset = q,
                       paginate_by = 8,
                       allow_empty = True,
                       template_name = 'localidades/listar.html',
                       extra_context = {active : 'class=active','tipo_de_lugar':active,'ordenar_por':ordenar_por}
                       )







@login_required
@user_passes_test(es_del_grupo_de_admins,login_url='/accounts/signin/no_admin')
def listar_opciones_para_crear(request):
    c = {}
    c.update({'user':request.user})  
    c.update(csrf(request))
    c.update() 
    return render_to_response("localidades/listar_opciones_para_crear.html", c,context_instance=RequestContext(request))

@login_required
@user_passes_test(es_del_grupo_de_expertos,login_url='/accounts/signin/no_admin')
def crear(request,tipo_de_lugar):
    model_a_pasar, form_a_pasar = get_form_for_object_dato(tipo_de_lugar)
    return create_object(request, 
                         model = model_a_pasar,
                         form_class = form_a_pasar,
                         template_name = 'localidades/crear.html', 
                         post_save_redirect = '/localidades/'
                         )     
@login_required
@user_passes_test(es_del_grupo_de_admins,login_url='/accounts/signin/no_admin')
def editar(request, object_id):
    lugar = get_object_or_404(Lugar, pk=object_id)
    return update_object(request,
                         model = lugar.cast().__class__,
                         template_name = 'localidades/editar.html', 
                         post_save_redirect = '/localidades/' + object_id,
                         object_id = object_id
                         )


@login_required
@user_passes_test(es_del_grupo_de_admins,login_url='/accounts/signin/no_admin')
def eliminar(request, object_id):
    get_object_or_404(Lugar, pk=object_id)
    return delete_object(request,
                         model = Lugar, 
                         template_name = 'localidades/confirmar_eliminar.html', 
                         post_delete_redirect = '/localidades/',
                         object_id = object_id
                         )
